const router = require('koa-router')();
const ApiError = require('../error/api_error');
const iptableModel = require('../models/iptable')
const dbHelper = require('../dbhelper/iptable')
const scheduleTools = require('../util/scheduleTools')
const schedule = require('node-schedule')

router.post('/stop',async (ctx)=>{
  var jobid = ctx.request.body.jobid
  try {
    if( global[jobid].cancel()) {
      delete  global[jobid]
      ctx.body = 'stoped'
    } else ctx.body = 'stope-error'
  }catch (e) {
    ctx.body = e.toString()
  }
});
router.put('/stop/:id',async (ctx)=>{
   const ctxParams = ctx.params;
   const dataObj = {...ctxParams, ...ctx.request.body};
  await dbHelper.update(dataObj).then((res) => {
    if(res){
      //console.log(dataObj.snmpInfo.ip+'_'+dataObj.snmpInfo.port+'_'+dataObj.snmpInfo.redKey)
      //从数据库读取哪些同SNMP的网段需要做任务扫描
     iptableModel.find({
      'snmpInfo.ip': dataObj.snmpInfo.ip,
      'snmpInfo.port': dataObj.snmpInfo.port,
      'snmpInfo.redKey': dataObj.snmpInfo.redKey,
      'snmpInfo.timeSan': true
    }).exec().then(res => {
      // console.log(res)
      // console.log(res.length)
      // console.log(dataObj.snmpInfo.ip+'_'+dataObj.snmpInfo.port+'_'+dataObj.snmpInfo.redKey)
       //如果没有同任务号的网段需要做定时任务，停止定时任务
      if ((res.length < 1) && global.hasOwnProperty('jobs') && global.jobs.hasOwnProperty(dataObj.snmpInfo.ip+'_'+dataObj.snmpInfo.port+'_'+dataObj.snmpInfo.redKey)){
        console.log("任务号下没有任务了，所以停止任务")
        schedule.cancelJob(dataObj.snmpInfo.ip+'_'+dataObj.snmpInfo.port+'_'+dataObj.snmpInfo.redKey)
        delete global.jobs[dataObj.snmpInfo.ip+'_'+dataObj.snmpInfo.port+'_'+dataObj.snmpInfo.redKey]
      }
    })
       ctx.body = res;
    }else {
     throw new ApiError(ApiErrorNames.UNEXIST_ID);
    }
  })
});

router.put('/start/:id',async (ctx)=>{
  const ctxParams = ctx.params;
  // 合并 路由中的参数 以及 发送过来的参数
  // 路由参数 以及发送的参数可能都有 id 以 发送的 id 为准，如果没有，取路由中的 id
  const dataObj = {...ctxParams, ...ctx.request.body};
 //1.先写库
  await dbHelper.update(dataObj).then((res) => {
    if (res) {
      //2.写库记录成功后，建立任务
      //设置全局任务变量,变量名是snmp的Ip + 网段的ID号
      if(!global.jobs) global.jobs = {}
      //如果没有这个snmp ip命令的JOB就创建一个
      if(!global.jobs.hasOwnProperty(dataObj.snmpInfo.ip+'_'+dataObj.snmpInfo.port+'_'+dataObj.snmpInfo.redKey)){
        //创建任务,名称：ip+port_redkey
        global.jobs[dataObj.snmpInfo.ip+'_'+dataObj.snmpInfo.port+'_'+dataObj.snmpInfo.redKey] = scheduleTools.createJob(dataObj.snmpInfo.ip+'_'+dataObj.snmpInfo.port+'_'+dataObj.snmpInfo.redKey,dataObj.snmpInfo)
      }
      //var jobNames = Object.getOwnPropertyNames(global.task)

     // .indexOf("ssss");
     // global[dataObj.snmpInfo.ip+'_'+dataObj._id] =
      ctx.body = res;
    } else {
      throw new ApiError(ApiErrorNames.UNEXIST_ID);
    }
  }).catch((err) => {
    throw new ApiError(err.name, err.message);
  });
})

module.exports = router;
